package com.shujia.day11;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;


/*
    因为List接口是Collection接口的子接口，所以可以调用Collection接口中对应的方法

    Collection:
        List: List中存储数据是有序的，并且是可以发生重复的
        Set: 集合是存储无序的，并且不能存储重复数据

    List中的成员方法
            void add(int index,E element)  // 对给定下标位置插入个新的值  下标的范围不能超过当前列表中下标的上限
            E remove(int index)
            E remove(Object obj) // 删除一个对象，要重写其equals方法
            E get(int index)
            E set(int index,E element)  // 对给定下标位置的数据，重新赋值
            ListIterator listIterator()

 */

public class Code01List {
    public static void main(String[] args) {
        List arrayList = new ArrayList();
        arrayList.add(11);
        arrayList.add(22);
        arrayList.add(33);
        arrayList.add(33);



        Iterator iterator = arrayList.iterator();

        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

        ArrayList stuArr = new ArrayList();

        stuArr.add(new Student("小许",16));
        stuArr.add(new Student("小云",17));
        stuArr.add(new Student("小龙",18));


        for (int i = 0; i < stuArr.size(); i++) {
            System.out.println(stuArr.get(i)); // get是List集合通过下标获取数据的方式
//            System.out.println(stuArr[i]);  []是数组特有的获取下标数据的方式
        }


        System.out.println("=============");
        Object removedObj = stuArr.remove(1);
        System.out.println((Student)removedObj);

        /*
            注意：如果传入的是一个自定义对象类，那么需要重写其equals方法
         */
        boolean remove = stuArr.remove(new Student("小龙", 18));
        System.out.println("res:"+remove);


        System.out.println("========");
        stuArr.add(1,new Student("小黄",12));  //  java.lang.IndexOutOfBoundsException

        for (Object o : stuArr) {
            System.out.println((Student)o);
        }


        stuArr.set(1,new Student("小青",13));

        System.out.println("----------");
        for (Object o : stuArr) {
            System.out.println((Student)o);
        }





    }
}

class Student{
    String name;
    int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(name, student.name) && Objects.equals(age, student.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println(name+"被删除");
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}
